Timer
Mit diesem Funktionsbaustein wird ein kleines Fenster gestartet (amodal) in dem die Uhrzeit angezeigt wird. Die Uhrzeit wird jede Sekunde aktualisiert. Hier wollen wir Ihnen zeigen, wie ein Dynpro regelmäßig aktualisiert werden kann. Dies macht mit der Uhrzeit natürlich wenig Sinn, denn das Aktualisieren des Dynpros kostet viel Systemperformance.
|
ACHTUNG!!!
Diese Variante ist komplett veraltet!!! Sie sollten auf jeden Fall die Klasse CL_GUI_TIMER verwenden!!!
Wenn Sie den Funktionsbaustein wie folgt aufrufen, haben Sie die Uhrzeit in einem separaten unabhängigen Fenster:
CALL FUNCTION ‘Z_UHRZEIT’ STARTING NEW TASK ‘ZUHRZEIT’.
Legen Sie in einer Funktionsgruppe den Funktionsbaustein Z_UHRZEIT an und fügen Sie den untenstehenden Code ein.
Sie müssen noch folgendes tun:
- Eintragen der Variablen ins TOP-Include
- Anlegen des PF-Status 0100 (Funktionscode BACK auf die Funktionstasten F3, Shift+F3, F12 legen und REFR auf eine beliebiege Taste)
- Anlegen des Titels 0100 (Uhrzeit)
- Anlegen des Dynpros “0100”:
– Eintragen Variable OK_CODE in “Elementliste” (Typ OK)
– Einfügen der Ablauflogik
Variablen TOP-Include (Globale Daten)
FUNCTION-POOL Z_UHR MESSAGE-ID q2.
* Common control definitions
INCLUDE <ctldef>.
* Function module data
DATA: timer_is_initialized VALUE ‘N’.
DATA: h_timer TYPE cntl_handle.
DATA: repid LIKE sy-repid.
DATA: mapped LIKE sy-ucomm VALUE ‘REFR’.
DATA: secs TYPE i VALUE 2.
DATA: uhrzeit TYPE syuzeit.
DATA: activex(1) VALUE ‘ ‘.
DATA: ok_code LIKE sy-ucomm.
DATA: autoref(20) VALUE ‘active’.
DATA: cuhrzeit(8).
Ablauflogik Dynpro 100
PROCESS BEFORE OUTPUT.
MODULE auto_refr_init.
MODULE auto_refr_drill.
MODULE status_0100.
PROCESS AFTER INPUT.
MODULE user_command_0100 AT EXIT-COMMAND.
MODULE auto_refr_control.
MODULE user_command_0100.
Coding
FUNCTION Z_UHRZEIT.
CALL FUNCTION ‘GUI_HAS_ACTIVEX’
IMPORTING
return = activex.
CALL SCREEN 100 starting at 10 10 ending at 20 10.
ENDFUNCTION.
*———————————————————————-*
FORM init_timer_control.
IF activex = ‘X’.
CALL FUNCTION ‘CONTROL_CREATE’
EXPORTING
clsid = ‘Sapgui.InfoCtrl.1’
shellstyle = 0
parentid = top_window ” just for testing
try = ‘ ‘
version_check = ‘ ‘
owner_repid = repid
no_flush = ‘X’
CHANGING
h_control = h_timer.
CALL FUNCTION ‘CONTROL_REGISTER_EVENT’
EXPORTING
h_control = h_timer
event = 1
EXCEPTIONS
OTHERS = 1.
IF sy-subrc = 1.
MESSAGE e008 WITH ‘UNKNOWN ERROR’ ‘CONTROL_REGISTER_EVENT’.
ENDIF.
CALL FUNCTION ‘CONTROL_REGISTER_EVT_CB’
EXPORTING
event = 1
callback_prog = repid
callback_form = ‘ON_TIMER’
CHANGING
h_control = h_timer
EXCEPTIONS
cb_not_found = 1
inv_callback_definition = 2
OTHERS = 3.
IF sy-subrc = 1.
MESSAGE e008 WITH ‘cb_not_found’ ‘CONTROL_REGISTER_EVT_CB’.
ELSEIF sy-subrc = 2.
MESSAGE e008 WITH ‘inv_callback_definition’ ‘CONTROL_REGISTER_EVT_CB’.
ELSEIF sy-subrc = 3.
MESSAGE e008 WITH ‘UNKNOWN_ERROR’ ‘CONTROL_REGISTER_EVT_CB’.
ENDIF.
CALL FUNCTION ‘CONTROL_FLUSH’.
ENDIF.
ENDFORM. ” INIT_TIMER_CONTROL
callback on_timer. “#EC CALLED
ok_code = mapped.
endcallback.
*&———————————————————————*
*& Module AUTO_REFR_CONTROL INPUT
*&———————————————————————*
MODULE auto_refr_control INPUT.
IF activex = ‘X’.
CALL FUNCTION ‘CONTROL_DISPATCH’
EXPORTING
fcode = ok_code.
ENDIF.
ENDMODULE. ” AUTO_REFR_CONTROL INPUT
*&———————————————————————*
*& Module AUTO_REFR_DRILL OUTPUT
*&———————————————————————*
MODULE auto_refr_drill OUTPUT.
IF activex = ‘X’.
IF autoref = ‘active’.
PERFORM drill_timer.
ENDIF.
CLEAR ok_code.
ENDIF.
ENDMODULE. ” AUTO_REFR_DRILL OUTPUT
*&———————————————————————*
*& Form DRILL_TIMER
*&———————————————————————*
FORM drill_timer.
IF activex = ‘X’.
CALL FUNCTION ‘CONTROL_CALL_METHOD’
EXPORTING
h_control = h_timer
method = ‘SetTimer’
p_count = 1
p1 = secs
EXCEPTIONS
cntl_system_error = 1
cntl_error = 2
OTHERS = 3.
IF sy-subrc = 1.
MESSAGE e008 WITH ‘CNTL_SYSTEM_ERROR’ ‘CONTROL_CALL_METHOD’.
ELSEIF sy-subrc = 2.
MESSAGE e008 WITH ‘CNTL_ERROR’ ‘CONTROL_CALL_METHOD’.
ELSEIF sy-subrc = 3.
MESSAGE e008 WITH ‘UNKNOWN_ERROR’ ‘CONTROL_CALL_METHOD’.
ENDIF.
ENDIF.
ENDFORM. ” DRILL_TIMER
*&———————————————————————*
*& Module AUTO_REFR_INIT OUTPUT
*&———————————————————————*
MODULE auto_refr_init OUTPUT.
IF activex = ‘X’.
IF timer_is_initialized = ‘N’.
repid = sy-repid.
CALL FUNCTION ‘CONTROL_INIT’.
PERFORM init_timer_control.
timer_is_initialized = ‘Y’.
autoref = ‘active’.
ENDIF.
ENDIF.
ENDMODULE. ” AUTO_REFR_INIT OUTPUT
*&———————————————————————*
*& Module STATUS_0100 OUTPUT
*&———————————————————————*
MODULE status_0100 OUTPUT.
SET PF-STATUS ‘0100’.
SET TITLEBAR ‘0100’.
CLEAR ok_code.
WRITE uhrzeit TO cuhrzeit.
ENDMODULE. ” STATUS_0100 OUTPUT
*&———————————————————————*
*& Module USER_COMMAND_0100 INPUT
*&———————————————————————*
MODULE user_command_0100 INPUT.
CASE ok_code.
WHEN ‘REFR’.
uhrzeit = sy-uzeit.
WHEN ‘BACK’.
SET SCREEN 0. LEAVE SCREEN.
ENDCASE.
ENDMODULE. ” USER_COMMAND_0100 INPUT
- Meine Eclipse-Plugins - 22. November 2024
- Interview mit Björn Schulz (Software-Heroes.com) - 3. September 2024
- Daten aus ALV ermitteln - 3. September 2024